1
|
|
|
/* global HTMLImageElement */ |
2
|
|
|
/* global HTMLCanvasElement */ |
3
|
|
|
/* global SVGElement */ |
4
|
|
|
|
5
|
|
|
import getOptionsFromElement from "./getOptionsFromElement.js"; |
6
|
|
|
|
7
|
|
|
// Takes an element and returns an object with information about how |
8
|
|
|
// it should be rendered |
9
|
|
|
// This could also return an array with these objects |
10
|
|
|
// { |
11
|
|
|
// element: The element that the renderer should draw on |
12
|
|
|
// renderer: The name of the renderer |
13
|
|
|
// afterRender (optional): If something has to done after the renderer |
14
|
|
|
// completed, calls afterRender (function) |
15
|
|
|
// options (optional): Options that can be defined in the element |
16
|
|
|
// } |
17
|
|
|
|
18
|
|
|
function getRenderProperties(element){ |
19
|
|
|
// If the element is a string, query select call again |
20
|
|
|
if(typeof element === "string"){ |
21
|
|
|
return querySelectedRenderProperties(element); |
22
|
|
|
} |
23
|
|
|
// If element is array. Recursivly call with every object in the array |
24
|
|
|
else if(Array.isArray(element)){ |
25
|
|
|
var returnArray = []; |
26
|
|
|
for(let i = 0; i < element.length; i++){ |
27
|
|
|
returnArray.push(getRenderProperties(element[i])); |
28
|
|
|
} |
29
|
|
|
return returnArray; |
30
|
|
|
} |
31
|
|
|
// If element, render on canvas and set the uri as src |
32
|
|
|
else if(typeof HTMLCanvasElement !== 'undefined' && element instanceof HTMLImageElement){ |
33
|
|
|
return newCanvasRenderProperties(element); |
34
|
|
|
} |
35
|
|
|
// If SVG |
36
|
|
|
else if(typeof SVGElement !== 'undefined' && element instanceof SVGElement){ |
37
|
|
|
return { |
38
|
|
|
element: element, |
39
|
|
|
options: getOptionsFromElement(element), |
40
|
|
|
renderer: "svg" |
41
|
|
|
}; |
42
|
|
|
} |
43
|
|
|
// If canvas (in browser) |
44
|
|
|
else if(typeof HTMLCanvasElement !== 'undefined' && element instanceof HTMLCanvasElement){ |
45
|
|
|
return { |
46
|
|
|
element: element, |
47
|
|
|
options: getOptionsFromElement(element), |
48
|
|
|
renderer: "canvas" |
49
|
|
|
}; |
50
|
|
|
} |
51
|
|
|
// If canvas (in node) |
52
|
|
|
else if(element.getContext){ |
53
|
|
|
return { |
54
|
|
|
element: element, |
55
|
|
|
renderer: "canvas" |
56
|
|
|
}; |
57
|
|
|
} |
58
|
|
|
else{ |
59
|
|
|
throw new Error("Not supported type to render on."); |
60
|
|
|
} |
61
|
|
|
} |
62
|
|
|
|
63
|
|
|
|
64
|
|
|
function querySelectedRenderProperties(string){ |
65
|
|
|
var selector = document.querySelectorAll(string); |
66
|
|
|
if(selector.length === 0){ |
67
|
|
|
throw new Error("No element found"); |
68
|
|
|
} |
69
|
|
|
else{ |
70
|
|
|
let returnArray = []; |
71
|
|
|
for(let i = 0; i < selector.length; i++){ |
72
|
|
|
returnArray.push(getRenderProperties(selector[i])); |
73
|
|
|
} |
74
|
|
|
return returnArray; |
75
|
|
|
} |
76
|
|
|
} |
77
|
|
|
|
78
|
|
|
|
79
|
|
|
function newCanvasRenderProperties(imgElement){ |
80
|
|
|
var canvas = document.createElement('canvas'); |
81
|
|
|
return { |
82
|
|
|
element: canvas, |
83
|
|
|
options: getOptionsFromElement(imgElement), |
84
|
|
|
renderer: "canvas", |
85
|
|
|
afterRender: function(){ |
86
|
|
|
imgElement.setAttribute("src", canvas.toDataURL()); |
87
|
|
|
} |
88
|
|
|
}; |
89
|
|
|
} |
90
|
|
|
|
91
|
|
|
export default getRenderProperties; |
92
|
|
|
|